// Copyright (C) 2017 Robin Templeton. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-multiplicative-operators-runtime-semantics-evaluation
description: BigInt division arithmetic
features: [BigInt]
---*/

function testDiv(x, y, z) {
    assert.sameValue(x / y, z, x + " / " + y + " = " + z);
}

testDiv(0xFEDCBA9876543210n, 0xFEDCBA9876543210n, 0x1n);
testDiv(0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, 0x1n);
testDiv(0xFEDCBA9876543210n, 0xFEDCBA98n, 0x100000000n);
testDiv(0xFEDCBA9876543210n, 0xFEDCBA97n, 0x100000001n);
testDiv(0xFEDCBA9876543210n, 0x1234n, 0xE0042813BE5DCn);
testDiv(0xFEDCBA9876543210n, 0x3n, 0x54F43E32D21C10B0n);
testDiv(0xFEDCBA9876543210n, 0x2n, 0x7F6E5D4C3B2A1908n);
testDiv(0xFEDCBA9876543210n, 0x1n, 0xFEDCBA9876543210n);
testDiv(0xFEDCBA9876543210n, -0x1n, -0xFEDCBA9876543210n);
testDiv(0xFEDCBA9876543210n, -0x2n, -0x7F6E5D4C3B2A1908n);
testDiv(0xFEDCBA9876543210n, -0x3n, -0x54F43E32D21C10B0n);
testDiv(0xFEDCBA9876543210n, -0x1234n, -0xE0042813BE5DCn);
testDiv(0xFEDCBA9876543210n, -0xFEDCBA97n, -0x100000001n);
testDiv(0xFEDCBA9876543210n, -0xFEDCBA98n, -0x100000000n);
testDiv(0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, -0x1n);
testDiv(0xFEDCBA9876543210n, -0xFEDCBA9876543210n, -0x1n);
testDiv(0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, 0x0n);
testDiv(0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, 0x1n);
testDiv(0xFEDCBA987654320Fn, 0xFEDCBA98n, 0x100000000n);
testDiv(0xFEDCBA987654320Fn, 0xFEDCBA97n, 0x100000001n);
testDiv(0xFEDCBA987654320Fn, 0x1234n, 0xE0042813BE5DCn);
testDiv(0xFEDCBA987654320Fn, 0x3n, 0x54F43E32D21C10AFn);
testDiv(0xFEDCBA987654320Fn, 0x2n, 0x7F6E5D4C3B2A1907n);
testDiv(0xFEDCBA987654320Fn, 0x1n, 0xFEDCBA987654320Fn);
testDiv(0xFEDCBA987654320Fn, -0x1n, -0xFEDCBA987654320Fn);
testDiv(0xFEDCBA987654320Fn, -0x2n, -0x7F6E5D4C3B2A1907n);
testDiv(0xFEDCBA987654320Fn, -0x3n, -0x54F43E32D21C10AFn);
testDiv(0xFEDCBA987654320Fn, -0x1234n, -0xE0042813BE5DCn);
testDiv(0xFEDCBA987654320Fn, -0xFEDCBA97n, -0x100000001n);
testDiv(0xFEDCBA987654320Fn, -0xFEDCBA98n, -0x100000000n);
testDiv(0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, -0x1n);
testDiv(0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0x0n);
testDiv(0xFEDCBA98n, 0xFEDCBA9876543210n, 0x0n);
testDiv(0xFEDCBA98n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(0xFEDCBA98n, 0xFEDCBA98n, 0x1n);
testDiv(0xFEDCBA98n, 0xFEDCBA97n, 0x1n);
testDiv(0xFEDCBA98n, 0x1234n, 0xE0042n);
testDiv(0xFEDCBA98n, 0x3n, 0x54F43E32n);
testDiv(0xFEDCBA98n, 0x2n, 0x7F6E5D4Cn);
testDiv(0xFEDCBA98n, 0x1n, 0xFEDCBA98n);
testDiv(0xFEDCBA98n, -0x1n, -0xFEDCBA98n);
testDiv(0xFEDCBA98n, -0x2n, -0x7F6E5D4Cn);
testDiv(0xFEDCBA98n, -0x3n, -0x54F43E32n);
testDiv(0xFEDCBA98n, -0x1234n, -0xE0042n);
testDiv(0xFEDCBA98n, -0xFEDCBA97n, -0x1n);
testDiv(0xFEDCBA98n, -0xFEDCBA98n, -0x1n);
testDiv(0xFEDCBA98n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(0xFEDCBA98n, -0xFEDCBA9876543210n, 0x0n);
testDiv(0xFEDCBA97n, 0xFEDCBA9876543210n, 0x0n);
testDiv(0xFEDCBA97n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(0xFEDCBA97n, 0xFEDCBA98n, 0x0n);
testDiv(0xFEDCBA97n, 0xFEDCBA97n, 0x1n);
testDiv(0xFEDCBA97n, 0x1234n, 0xE0042n);
testDiv(0xFEDCBA97n, 0x3n, 0x54F43E32n);
testDiv(0xFEDCBA97n, 0x2n, 0x7F6E5D4Bn);
testDiv(0xFEDCBA97n, 0x1n, 0xFEDCBA97n);
testDiv(0xFEDCBA97n, -0x1n, -0xFEDCBA97n);
testDiv(0xFEDCBA97n, -0x2n, -0x7F6E5D4Bn);
testDiv(0xFEDCBA97n, -0x3n, -0x54F43E32n);
testDiv(0xFEDCBA97n, -0x1234n, -0xE0042n);
testDiv(0xFEDCBA97n, -0xFEDCBA97n, -0x1n);
testDiv(0xFEDCBA97n, -0xFEDCBA98n, 0x0n);
testDiv(0xFEDCBA97n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(0xFEDCBA97n, -0xFEDCBA9876543210n, 0x0n);
testDiv(0x1234n, 0xFEDCBA9876543210n, 0x0n);
testDiv(0x1234n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(0x1234n, 0xFEDCBA98n, 0x0n);
testDiv(0x1234n, 0xFEDCBA97n, 0x0n);
testDiv(0x1234n, 0x1234n, 0x1n);
testDiv(0x1234n, 0x3n, 0x611n);
testDiv(0x1234n, 0x2n, 0x91An);
testDiv(0x1234n, 0x1n, 0x1234n);
testDiv(0x1234n, -0x1n, -0x1234n);
testDiv(0x1234n, -0x2n, -0x91An);
testDiv(0x1234n, -0x3n, -0x611n);
testDiv(0x1234n, -0x1234n, -0x1n);
testDiv(0x1234n, -0xFEDCBA97n, 0x0n);
testDiv(0x1234n, -0xFEDCBA98n, 0x0n);
testDiv(0x1234n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(0x1234n, -0xFEDCBA9876543210n, 0x0n);
testDiv(0x3n, 0xFEDCBA9876543210n, 0x0n);
testDiv(0x3n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(0x3n, 0xFEDCBA98n, 0x0n);
testDiv(0x3n, 0xFEDCBA97n, 0x0n);
testDiv(0x3n, 0x1234n, 0x0n);
testDiv(0x3n, 0x3n, 0x1n);
testDiv(0x3n, 0x2n, 0x1n);
testDiv(0x3n, 0x1n, 0x3n);
testDiv(0x3n, -0x1n, -0x3n);
testDiv(0x3n, -0x2n, -0x1n);
testDiv(0x3n, -0x3n, -0x1n);
testDiv(0x3n, -0x1234n, 0x0n);
testDiv(0x3n, -0xFEDCBA97n, 0x0n);
testDiv(0x3n, -0xFEDCBA98n, 0x0n);
testDiv(0x3n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(0x3n, -0xFEDCBA9876543210n, 0x0n);
testDiv(0x2n, 0xFEDCBA9876543210n, 0x0n);
testDiv(0x2n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(0x2n, 0xFEDCBA98n, 0x0n);
testDiv(0x2n, 0xFEDCBA97n, 0x0n);
testDiv(0x2n, 0x1234n, 0x0n);
testDiv(0x2n, 0x3n, 0x0n);
testDiv(0x2n, 0x2n, 0x1n);
testDiv(0x2n, 0x1n, 0x2n);
testDiv(0x2n, -0x1n, -0x2n);
testDiv(0x2n, -0x2n, -0x1n);
testDiv(0x2n, -0x3n, 0x0n);
testDiv(0x2n, -0x1234n, 0x0n);
testDiv(0x2n, -0xFEDCBA97n, 0x0n);
testDiv(0x2n, -0xFEDCBA98n, 0x0n);
testDiv(0x2n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(0x2n, -0xFEDCBA9876543210n, 0x0n);
testDiv(0x1n, 0xFEDCBA9876543210n, 0x0n);
testDiv(0x1n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(0x1n, 0xFEDCBA98n, 0x0n);
testDiv(0x1n, 0xFEDCBA97n, 0x0n);
testDiv(0x1n, 0x1234n, 0x0n);
testDiv(0x1n, 0x3n, 0x0n);
testDiv(0x1n, 0x2n, 0x0n);
testDiv(0x1n, 0x1n, 0x1n);
testDiv(0x1n, -0x1n, -0x1n);
testDiv(0x1n, -0x2n, 0x0n);
testDiv(0x1n, -0x3n, 0x0n);
testDiv(0x1n, -0x1234n, 0x0n);
testDiv(0x1n, -0xFEDCBA97n, 0x0n);
testDiv(0x1n, -0xFEDCBA98n, 0x0n);
testDiv(0x1n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(0x1n, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0x1n, 0xFEDCBA9876543210n, 0x0n);
testDiv(-0x1n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x1n, 0xFEDCBA98n, 0x0n);
testDiv(-0x1n, 0xFEDCBA97n, 0x0n);
testDiv(-0x1n, 0x1234n, 0x0n);
testDiv(-0x1n, 0x3n, 0x0n);
testDiv(-0x1n, 0x2n, 0x0n);
testDiv(-0x1n, 0x1n, -0x1n);
testDiv(-0x1n, -0x1n, 0x1n);
testDiv(-0x1n, -0x2n, 0x0n);
testDiv(-0x1n, -0x3n, 0x0n);
testDiv(-0x1n, -0x1234n, 0x0n);
testDiv(-0x1n, -0xFEDCBA97n, 0x0n);
testDiv(-0x1n, -0xFEDCBA98n, 0x0n);
testDiv(-0x1n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x1n, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0x2n, 0xFEDCBA9876543210n, 0x0n);
testDiv(-0x2n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x2n, 0xFEDCBA98n, 0x0n);
testDiv(-0x2n, 0xFEDCBA97n, 0x0n);
testDiv(-0x2n, 0x1234n, 0x0n);
testDiv(-0x2n, 0x3n, 0x0n);
testDiv(-0x2n, 0x2n, -0x1n);
testDiv(-0x2n, 0x1n, -0x2n);
testDiv(-0x2n, -0x1n, 0x2n);
testDiv(-0x2n, -0x2n, 0x1n);
testDiv(-0x2n, -0x3n, 0x0n);
testDiv(-0x2n, -0x1234n, 0x0n);
testDiv(-0x2n, -0xFEDCBA97n, 0x0n);
testDiv(-0x2n, -0xFEDCBA98n, 0x0n);
testDiv(-0x2n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x2n, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0x3n, 0xFEDCBA9876543210n, 0x0n);
testDiv(-0x3n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x3n, 0xFEDCBA98n, 0x0n);
testDiv(-0x3n, 0xFEDCBA97n, 0x0n);
testDiv(-0x3n, 0x1234n, 0x0n);
testDiv(-0x3n, 0x3n, -0x1n);
testDiv(-0x3n, 0x2n, -0x1n);
testDiv(-0x3n, 0x1n, -0x3n);
testDiv(-0x3n, -0x1n, 0x3n);
testDiv(-0x3n, -0x2n, 0x1n);
testDiv(-0x3n, -0x3n, 0x1n);
testDiv(-0x3n, -0x1234n, 0x0n);
testDiv(-0x3n, -0xFEDCBA97n, 0x0n);
testDiv(-0x3n, -0xFEDCBA98n, 0x0n);
testDiv(-0x3n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x3n, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0x1234n, 0xFEDCBA9876543210n, 0x0n);
testDiv(-0x1234n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x1234n, 0xFEDCBA98n, 0x0n);
testDiv(-0x1234n, 0xFEDCBA97n, 0x0n);
testDiv(-0x1234n, 0x1234n, -0x1n);
testDiv(-0x1234n, 0x3n, -0x611n);
testDiv(-0x1234n, 0x2n, -0x91An);
testDiv(-0x1234n, 0x1n, -0x1234n);
testDiv(-0x1234n, -0x1n, 0x1234n);
testDiv(-0x1234n, -0x2n, 0x91An);
testDiv(-0x1234n, -0x3n, 0x611n);
testDiv(-0x1234n, -0x1234n, 0x1n);
testDiv(-0x1234n, -0xFEDCBA97n, 0x0n);
testDiv(-0x1234n, -0xFEDCBA98n, 0x0n);
testDiv(-0x1234n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(-0x1234n, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0xFEDCBA97n, 0xFEDCBA9876543210n, 0x0n);
testDiv(-0xFEDCBA97n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(-0xFEDCBA97n, 0xFEDCBA98n, 0x0n);
testDiv(-0xFEDCBA97n, 0xFEDCBA97n, -0x1n);
testDiv(-0xFEDCBA97n, 0x1234n, -0xE0042n);
testDiv(-0xFEDCBA97n, 0x3n, -0x54F43E32n);
testDiv(-0xFEDCBA97n, 0x2n, -0x7F6E5D4Bn);
testDiv(-0xFEDCBA97n, 0x1n, -0xFEDCBA97n);
testDiv(-0xFEDCBA97n, -0x1n, 0xFEDCBA97n);
testDiv(-0xFEDCBA97n, -0x2n, 0x7F6E5D4Bn);
testDiv(-0xFEDCBA97n, -0x3n, 0x54F43E32n);
testDiv(-0xFEDCBA97n, -0x1234n, 0xE0042n);
testDiv(-0xFEDCBA97n, -0xFEDCBA97n, 0x1n);
testDiv(-0xFEDCBA97n, -0xFEDCBA98n, 0x0n);
testDiv(-0xFEDCBA97n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(-0xFEDCBA97n, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0xFEDCBA98n, 0xFEDCBA9876543210n, 0x0n);
testDiv(-0xFEDCBA98n, 0xFEDCBA987654320Fn, 0x0n);
testDiv(-0xFEDCBA98n, 0xFEDCBA98n, -0x1n);
testDiv(-0xFEDCBA98n, 0xFEDCBA97n, -0x1n);
testDiv(-0xFEDCBA98n, 0x1234n, -0xE0042n);
testDiv(-0xFEDCBA98n, 0x3n, -0x54F43E32n);
testDiv(-0xFEDCBA98n, 0x2n, -0x7F6E5D4Cn);
testDiv(-0xFEDCBA98n, 0x1n, -0xFEDCBA98n);
testDiv(-0xFEDCBA98n, -0x1n, 0xFEDCBA98n);
testDiv(-0xFEDCBA98n, -0x2n, 0x7F6E5D4Cn);
testDiv(-0xFEDCBA98n, -0x3n, 0x54F43E32n);
testDiv(-0xFEDCBA98n, -0x1234n, 0xE0042n);
testDiv(-0xFEDCBA98n, -0xFEDCBA97n, 0x1n);
testDiv(-0xFEDCBA98n, -0xFEDCBA98n, 0x1n);
testDiv(-0xFEDCBA98n, -0xFEDCBA987654320Fn, 0x0n);
testDiv(-0xFEDCBA98n, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, 0x0n);
testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, -0x1n);
testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA98n, -0x100000000n);
testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA97n, -0x100000001n);
testDiv(-0xFEDCBA987654320Fn, 0x1234n, -0xE0042813BE5DCn);
testDiv(-0xFEDCBA987654320Fn, 0x3n, -0x54F43E32D21C10AFn);
testDiv(-0xFEDCBA987654320Fn, 0x2n, -0x7F6E5D4C3B2A1907n);
testDiv(-0xFEDCBA987654320Fn, 0x1n, -0xFEDCBA987654320Fn);
testDiv(-0xFEDCBA987654320Fn, -0x1n, 0xFEDCBA987654320Fn);
testDiv(-0xFEDCBA987654320Fn, -0x2n, 0x7F6E5D4C3B2A1907n);
testDiv(-0xFEDCBA987654320Fn, -0x3n, 0x54F43E32D21C10AFn);
testDiv(-0xFEDCBA987654320Fn, -0x1234n, 0xE0042813BE5DCn);
testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA97n, 0x100000001n);
testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA98n, 0x100000000n);
testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0x1n);
testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0x0n);
testDiv(-0xFEDCBA9876543210n, 0xFEDCBA9876543210n, -0x1n);
testDiv(-0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, -0x1n);
testDiv(-0xFEDCBA9876543210n, 0xFEDCBA98n, -0x100000000n);
testDiv(-0xFEDCBA9876543210n, 0xFEDCBA97n, -0x100000001n);
testDiv(-0xFEDCBA9876543210n, 0x1234n, -0xE0042813BE5DCn);
testDiv(-0xFEDCBA9876543210n, 0x3n, -0x54F43E32D21C10B0n);
testDiv(-0xFEDCBA9876543210n, 0x2n, -0x7F6E5D4C3B2A1908n);
testDiv(-0xFEDCBA9876543210n, 0x1n, -0xFEDCBA9876543210n);
testDiv(-0xFEDCBA9876543210n, -0x1n, 0xFEDCBA9876543210n);
testDiv(-0xFEDCBA9876543210n, -0x2n, 0x7F6E5D4C3B2A1908n);
testDiv(-0xFEDCBA9876543210n, -0x3n, 0x54F43E32D21C10B0n);
testDiv(-0xFEDCBA9876543210n, -0x1234n, 0xE0042813BE5DCn);
testDiv(-0xFEDCBA9876543210n, -0xFEDCBA97n, 0x100000001n);
testDiv(-0xFEDCBA9876543210n, -0xFEDCBA98n, 0x100000000n);
testDiv(-0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, 0x1n);
testDiv(-0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0x1n);
